package com.pdweb.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.pdweb.vo.Turnos;

public class TurnosDao extends DBconnection {
	private Connection conn;

	public TurnosDao() throws ClassNotFoundException, SQLException {
		this.conn = getConnection();
	}

	public TurnosDao(Connection conn) {
		this.conn = conn;
	}

	public void adicionaTurnos(Turnos turno) throws SQLException {

		PreparedStatement st = null;

		try {
			st = conn
					.prepareStatement("insert into turnos(ST_NOME_TURN, ST_ENTRADA_TURN, ST_ALMOCOSAIDA_TURN, ST_ALMOCORETORNO_TURN, ST_SAIDA_TURN) value(?,?,?,?,?);");

			st.setString(1, turno.getNomeTurno());
			st.setString(2, turno.getHoraEntrada());
			st.setString(3, turno.getHoraAlmocoSaida());
			st.setString(4, turno.getHoraAlmocoRetorno());
			st.setString(5, turno.getHoraSaida());
			st.execute();
		} finally {
			st.close();
		}
	}

	public List<Turnos> obterTurnos() throws SQLException {

		List<Turnos> turnos = new ArrayList<Turnos>();

		Statement st = null;
		ResultSet rs = null;

		try {
			st = conn.createStatement();
			rs = st.executeQuery("select * from turnos");
			while (rs.next()) {
				Turnos result = new Turnos();
				
				result.setIdTurno(rs.getInt("ID_TURNO_TURN"));
				result.setNomeTurno(rs.getString("ST_NOME_TURN"));
				result.setHoraEntrada(rs.getString("ST_ENTRADA_TURN"));
				result.setHoraAlmocoSaida(rs.getString("ST_ALMOCOSAIDA_TURN"));
				result.setHoraAlmocoRetorno(rs.getString("ST_ALMOCORETORNO_TURN"));
				result.setHoraSaida(rs.getString("ST_SAIDA_TURN"));
				
				turnos.add(result);
			}
		} finally {
			st.close();
			rs.close();
		}
		return turnos;
	}

	public void excluirTurno(Turnos turno) throws SQLException {

		PreparedStatement st = null;

		try {
			st = conn
					.prepareStatement("delete from turnos where ID_TURNO_TURN = ?;");

			st.setInt(1, turno.getIdTurno());
			st.execute();
		} finally {
			st.close();
		}
	}

	public Turnos obterTurno(Turnos turno) throws SQLException {
		Turnos retorno = null;
		Statement st = null;
		ResultSet rs = null;

		try {
			st = conn.createStatement();

			String sql = "select * from turnos where ID_TURNO_TURN =  "
					+ turno.getIdTurno();

			rs = st.executeQuery(sql);

			if (rs.next()) {
				retorno = new Turnos();
				
				retorno.setIdTurno(rs.getInt("ID_TURNO_TURN"));
				retorno.setNomeTurno(rs.getString("ST_NOME_TURN"));
				retorno.setHoraEntrada(rs.getString("ST_ENTRADA_TURN"));
				retorno.setHoraAlmocoSaida(rs.getString("ST_ALMOCOSAIDA_TURN"));
				retorno.setHoraAlmocoRetorno(rs.getString("ST_ALMOCORETORNO_TURN"));
				retorno.setHoraSaida(rs.getString("ST_SAIDA_TURN"));
			}
			return retorno;
		} finally {
			st.close();
			rs.close();
		}
	}

	public void atualizaTurno(Turnos turno) throws SQLException {

		PreparedStatement st = null;
		try {
			st = conn
					.prepareStatement("UPDATE turnos SET ST_NOME_TURN = ?, ST_ENTRADA_TURN = ?, ST_ALMOCOSAIDA_TURN = ?, ST_ALMOCORETORNO_TURN = ?, ST_SAIDA_TURN = ? WHERE ID_TURNO_TURN = ?;");
			st.setString(1, turno.getNomeTurno());
			st.setString(2, turno.getHoraEntrada());
			st.setString(3, turno.getHoraAlmocoSaida());
			st.setString(4, turno.getHoraAlmocoRetorno());
			st.setString(5, turno.getHoraSaida());
			st.setInt(6, turno.getIdTurno());
			st.execute();
		} finally {
			st.close();

		}
	}
	
	public List<Turnos> consultaTurno(String sql) throws SQLException {

		List<Turnos> retorno = new ArrayList<Turnos>();
		Statement st = null;
		ResultSet rs = null;

		try {
			st = conn.createStatement();

			rs = st.executeQuery(sql);

			
				while (rs.next()) {
					
					Turnos turnos = new Turnos();
					
					turnos.setIdTurno(rs.getInt("ID_TURNO_TURN"));
					turnos.setNomeTurno(rs.getString("ST_NOME_TURN"));
					turnos.setHoraEntrada(rs.getString("ST_ENTRADA_TURN"));
					turnos.setHoraAlmocoSaida(rs.getString("ST_ALMOCOSAIDA_TURN"));
					turnos.setHoraAlmocoRetorno(rs.getString("ST_ALMOCORETORNO_TURN"));
					turnos.setHoraSaida(rs.getString("ST_SAIDA_TURN"));;

					retorno.add(turnos);
				
			}
			return retorno;
		} finally {
			st.close();
			rs.close();
		}
	}
}
